﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;

namespace Kakehashi
{
    public class Config
    {
        /// <summary>
        /// GPSの接続されたCOMポート
        /// </summary>
        public string GPSCOMPort;
        /// <summary>
        /// 加速度センサが接続されたCOMポート
        /// </summary>
        public string TDSCOMPort;
    }


    /// <summary>
    /// 設定を読み込みます
    /// </summary>
    public class ConfigLoader
    {
        private static ConfigLoader instance;
        string _fileName = "config.xml";
        public Config Config;

        /// <summary>
        /// 起動したフォルダにある config.xml を読み込みます
        /// </summary>
        private ConfigLoader()
        {
            Config = Load();
        }

        public static ConfigLoader Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new ConfigLoader();
                }
                return instance;
            }
        }

        /// <summary>
        /// Configの値を保存します。
        /// </summary>
        public void Save()
        {
            System.Xml.Serialization.XmlSerializer serializer =
                new System.Xml.Serialization.XmlSerializer(typeof(Config));
            System.IO.FileStream fs = new System.IO.FileStream(
                _fileName, System.IO.FileMode.Create);
            serializer.Serialize(fs, Config);
            fs.Close();
        }
        /// <summary>
        /// Configの値を読み込みます。ファイルが存在しない場合には、
        /// デフォルト値が設定されたConfigファイルを生成します。
        /// </summary>
        public Config Load()
        {
            if (!File.Exists(_fileName))
            {
                SetDefaultValue();
                Save();
            }
            try
            {
                //XmlSerializerオブジェクトの作成
                System.Xml.Serialization.XmlSerializer serializer =
                    new System.Xml.Serialization.XmlSerializer(typeof(Config));
                //ファイルを開く
                System.IO.FileStream fs =
                    new System.IO.FileStream(_fileName, System.IO.FileMode.Open);
                //XMLファイルから読み込み、逆シリアル化する
                Config =
                    (Config)serializer.Deserialize(fs);
                //閉じる
                fs.Close();
            }catch(Exception)
            {
                MessageBox.Show("コンフィグファイルが不正です。内容を確認してください。",
                    "エラー", MessageBoxButtons.OK,MessageBoxIcon.Error);
                Application.Exit();
            }
            return Config;
        }
        private void SetDefaultValue()
        {
            Config = new Config();
            Config.GPSCOMPort = "COM18";
            Config.TDSCOMPort = "COM19";
        }
    }
}
